package com.example.coupon.service;

import com.example.coupon.entity.Coupon;
import com.example.coupon.exception.CouponException;

import java.util.List;

/**
 * redis 相关的操作服务接口定义
 * 1、用户的三个状态优惠券 Cache相关操作
 * 2、优惠券模版生成的优惠券码 Cache操作
 * @author wangbo
 * @description:
 * @date 2021/2/1910:11
 */
public interface IRedisService {

    /**
     * 根据UserId和状态找到缓存的优惠券列表数据
     * @param userId 用户id
     * @param status 优惠券状态{@link com.example.coupon.constant.CouponStatus}
     * @return {@link Coupon} 注意，可能会返回null 代表从没有过记录
     */
    List<Coupon> getCacheCoupons(Long userId, Integer status);

    /**
     * 保存空的优惠券列表到缓存中
     * @param userId 用户ID
     * @param status 优惠券状态列表
     */
    void saveEmptyCouponListToCache(Long userId,List<Integer> status);

    /**
     * 尝试从cache中获取一个优惠券码
     * @param templateId 优惠券模版主键
     * @return 优惠券码
     */
    String tryToAcquireCouponCodeFromCache(Integer templateId);

    /**
     * 将优惠券保存到Cache中
     * @param userId 用户id
     * @param coupons {@link Coupon}s
     * @param status 优惠券状态
     * @return 保存成功的个数
     * @throws CouponException
     */
    Integer addCouponToCache(Long userId,List<Coupon> coupons,Integer status)throws CouponException;
}
